package admin.server.service;

import org.springframework.transaction.annotation.Transactional;
import admin.common.vo.PageVo;
import admin.common.domain.dto.UserDto;
import admin.common.vo.ResponseVO;
import admin.server.model.dto.UmsAdminDetailDto;
import admin.server.model.dto.UmsAdminDto;
import admin.server.model.param.UmsAdminLoginParam;
import admin.server.model.param.UmsAdminRegisterParam;
import admin.server.model.param.UmsAdminUpdateParam;
import admin.server.model.param.UpdateAdminPasswordParam;
import admin.dao.model.UmsAdmin;
import admin.dao.model.UmsResource;
import admin.dao.model.UmsRole;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 后台管理员Service
 * Created by zgb on 2018/4/26.
 */
public interface UmsAdminService {
    /**
     * 根据用户名获取后台管理员
     */
    UmsAdmin getAdminByUsername(String username);

    /**
     * 注册功能
     */
    UmsAdmin register(UmsAdminRegisterParam umsAdminRegisterParam,HttpServletRequest request) throws Exception;


    /**
     * 登录功能
     *
     * @return 调用认证中心返回结果
     */
    ResponseVO login(UmsAdminLoginParam umsAdminLoginParam) throws Exception;

    ResponseVO refreshToken(String refreshToken) throws Exception;

    void logout(String authHeader);

    void kick(String userName);

    /**
     * 根据用户id获取用户
     */
    UmsAdmin getItem(Long id);
    UmsAdminDetailDto detail(Long id);

    /**
     * 根据用户名或昵称分页查询用户
     */
    PageVo<UmsAdminDto> list(String keyword, Integer pageSize, Integer pageNum);
    List<UmsAdmin> list();

    /**
     * 修改指定用户信息
     */
    void update( UmsAdminUpdateParam admin);

    /**
     * 删除指定用户
     */
    void delete(Long id);

    /**
     * 修改用户角色关系
     */
    @Transactional(rollbackFor = Exception.class)
    int updateRole(Long adminId, List<Long> roleIds);

    /**
     * 获取用户对于角色
     */
    List<UmsRole> getRoleList(Long adminId);

    /**
     * 获取指定用户(指定菜单)的可访问资源
     */
    List<UmsResource> getResourceList(Long adminId,Long menuId);

    /**
     * 修改密码
     */
    int updatePassword(UpdateAdminPasswordParam updatePasswordParam);

    /**
     * 获取用户信息
     */
    UserDto loadUserByUsername(String username);

    /**
     * 获取当前登录后台用户
     */
    UmsAdmin getCurrentAdmin(HttpServletRequest request) throws Exception;


}
